草庐IT

Java CLI 解析器

全部标签

c++ - 为什么 GCC 不能将此使用声明解析为正确的类型

在我正在从事的项目中编写代码时,我发现了一些非常奇怪的事情:namespacedetail{structtuplelike_tag{};structarraylike_tag{};templatestructcall_with_traits;templatestructcall_with_traits>{usingtag=tuplelike_tag;enum{size=sizeof...(Ts)};};templatestructcall_with_traits>{usingtag=arraylike_tag;enum{size=Sz};};templatestructcall_wit

c++ - 链接器读取库但在其中找不到符号?未解析的外部符号,但仅适用于 Win32 而不是 x64

背景我有一个C天文库,我想在我的C++应用程序中使用它。我在Win32和x64配置中在VisualStudio2012Express中构建它,并且:动态调试(.dll)动态发布(.dll)静态调试(.lib)静态发布(.lib)...因此总共有2*4=8个二进制文件(不包括*.pdb文件等)然后我使用BatchBuild来构建所有配置,因为有时我需要不同的版本,我发现在一开始就完成这一切并使用一个过程比随意混合要好得多。在我的C++应用程序中,我有相同的过程,并根据名称链接到库。具体来说,在我的项目属性Linker->Input字段中,我有:SwissEphemeris_$(Platf

c++ - 反射镜角度的解析法

我在3D空间中有一个固定光线Lr和一个可以围绕固定点Mrot旋转的镜子M,这一点不在镜子的同一平面上,换句话说,镜子平面与以Mrot为中心且半径固定d的球体相切。使用该配置,我想找到一个方程式,该方程式接收点P作为参数,并根据镜子在3D空间中的旋转得出结果。我们可以认为镜像平面没有边界(无限平面)并且它的旋转没有限制。此外,镜子仅在其旋转点的另一侧反射。图中是输入点P1和P2不同的两种情况,分别有解角alpha1和alpha2。图片为2D,简化绘图,真实案例为3D。此刻我在随机旋转计算与镜面的交点,然后计算光线反射,看看离我想到达的点(P)有多远。最后迭代一些条件改变旋转直到它匹配。显

【Spark的五种Join策略解析】

join基本流程Spark将参与Join的两张表抽象为流式遍历表(streamIter)和查找表(buildIter),通常streamIter为大表,buildIter为小表,我们不用担心哪个表为streamIter,哪个表为buildIter,这个spark会根据join语句自动帮我们完成。对于每条来自streamIter的记录,都要去buildIter中查找匹配的记录,所以buildIter一定要是查找性能较优的数据结构。spark提供了三种join实现:sortmergejoin、broadcastjoin以及hashjoin。五种join策略ShuffleHashJoinBroadc

c++ - 如何解析后跟分号或换行符的条目(boost::spirit)?

在Boost::Spirit中,我如何解析后跟分号或带有可选分号的换行符的条目?示例输入,其中每个条目都是一个int和一个double:121.4;6313.2242356.4;58.1下面是示例代码,仅解析后跟空格的条目:#include#include#include#include#includenamespaceqi=boost::spirit::qi;typedefstd::pairEntry;templatestructMyGrammar:qi::grammar(),Skipper>{MyGrammar():MyGrammar::base_type(entries){ent

c++ - const 成员函数的重载解析 C++

假设您有一个带有两个成员函数的类Tcharfoo()const{...}charfoo(){...}。据我了解,当需要常数T时,我们解析为(1);对于非常量T,我们解决(2)。对吗?在这个决议中调用了哪条规则?(引用标准很棒,但感谢有用的简短摘要)注意事项:我试着用谷歌搜索它,但我在SO上得到的旧点击是涉及const的其他重载决议的案例。但是,链接到一个旧的SO实际上解释了上面的内容显然很棒。这是在重读Stroustrup的“TheC++programminglanguage”,第2版(“特别版”)第11.12节中的String/Cref示例时出现的,p。296.由于Stroustru

c++ - 重载解析、定义函数和模板的顺序

考虑以下代码片段:templatestd::enable_if_t::value,bool>func(Tvalue){std::cout(value));}boolfunc(int64_tvalue){std::cout它会导致无限递归。但是,交换这两个函数的定义顺序(如果boolfunc(int64_tvalue)在模板一之前定义)有助于避免此问题。这是为什么呢?函数重载的顺序重要吗? 最佳答案 Doesorderoffunctionoverloadsmatter?它不会改变重载决议的结果,但会改变namelookup的结果。;这

c++ - 我应该如何构建一个简单的 LR 解析器?

我正在尝试为一种将用于生成其他文件的模板(配置)文件构建一个简单的LR解析器。我已经阅读和阅读了有关LR解析器的信息,但我似乎无法理解它!我知道有一个解析栈,一个状态栈和一个解析表。token被读入解析堆栈,当规则匹配时,token被移动或减少,具体取决于解析表。这递归地继续下去,直到所有的标记都被减少,然后解析完成。问题是我真的不知道如何生成解析表。我已经阅读了很多描述,但是语言是技术性的,我就是看不懂。谁能告诉我该怎么做?此外,我将如何存储语法规则之类的东西?http://codepad.org/oRjnKacH是我尝试解析其语言语法的文件示例。我以前从未这样做过,所以我只是在寻求

c++ - 用 boost spirit 解析转义的字符串

我正在使用Spirit2.4,我想解析这样的结构:文本{text_field};要点是在text_field中是一个带有符号'{'、'}'和'\'的转义字符串。我想使用qi为此创建一个解析器。我一直在尝试这个:usingboost::spirit::standard::char_;usingboost::spirit::standard::string;usingqi::lexeme;usingqi::lit;qi::ruletext;qi::rulecontent;qi::ruleescChar;text%=lit("Text")>>'{'>>content>>"};";conten

c++ - 手写递归上升解析器中的递归左递归

我一直在编写一些递归上升解析器,而我一直在努力解决的问题之一是左递归。在我看来,右递归可以递归地表达,就像addExpr:primaryExpr'+'addExpr|primaryExpr;按照的思路parseAddExpr(){autox=parsePrimaryExpr();if(next_token=='+'){autoresult=make_unique();result->lhs=x;result->rhs=parseAddExpr();returnstd::move(result);}returnstd::move(x);}但是对于左递归,我能想出的只是一个while循环。